package com.briup.day11;

import lombok.Getter;

/**
 * 定义一个枚举类，用于维护订单的状态；
 * 枚举：穷举，将某一个类的所有对象都提前定义出来，
 * 维护到一个类中
 */
@Getter
public enum OrderStatus {
    // 这里本质上就是在利用枚举类构造器创建对象，
    // 如本类中只有一个两参构造器，所以创建对象时
    // 必须调用该构造器，并传入对应的参数
    NOT_PAY(1, "订单未支付"),
    PAYED(2, "已支付"),

    // 枚举类通过第一个;将枚举类分割成两个部分，
    // ;前的是需要提前定义出来的枚举类对象，
    // ;后定义的是枚举类的结构，如属性、构造器、方法等
    ;

    // 订单状态需要包含状态码和状态描述
    private final int code;
    private final String description;

    // 枚举类的构造器只能是 private修饰的，即枚举类对象只能在该类中进行定义
    OrderStatus(int code, String description) {
        this.code = code;
        this.description = description;
    }

    // 在枚举类中，可以创建成员方法，其余如私有方法等也可以定义
    public void test() {
        System.out.println("这是枚举类中的成员方法test");
    }

    // 还可以定义静态方法，如code和description之间的转化关系
    public static String covert2Description(int code) {
        // 遍历枚举中所有的对象，一一比对
        // 在所有的枚举类中都存在一个values方法，能够获取枚举类中定义好的所有对象
        OrderStatus[] values = values();
        for (OrderStatus value : values) {
            if (value.code == code) {
                return value.description;
            }
        }
        return null;
    }
}

class Test3 {
    public static void main(String[] args) {
        // 通过枚举类，能够直接获取到其内部定义好的对象
        // 获取到对象后就可以调用其内部定义好的成员方法
        OrderStatus.NOT_PAY.test();
    }
}